import runtimeType from './runtimeType.js';

/**
 * 获取系统设备信息【异步方法】
 * @description 获取系统设备信息
 * @param {Function} callback 成功回调函数
 * @param {boolean} isGetIp 是否获取设备IP地址，只能在APP内使用
 */
function systemInfo(callback, isGetIp = false) {
	
	// 初始化返回数据，数值单位：px
	var data_back = {
		"IP": '', // 设备IP地址
		"country": "", // 国家
		"province": "", // 省份
		brand: '', // 手机品牌
		model: '', // 手机型号
		platform: '', // 客户端平台，值域为：ios、android、pc
		system: '', // 操作系统版本(即安卓版本)
		"statusBar_px": 0, // 设备顶部状态栏高度(px)
		"statusBar_rpx": 0, // 设备顶部状态栏高度(rpx)
		navigationBar_px: 0, // 页面标题栏高度(px)
		navigationBar_rpx: 0, // 页面标题栏高度(rpx)
		"width_px": 0, // page窗口宽度(px)
		"width_rpx": 0, // page窗口宽度(rpx)
		height_px: 0, // page窗口高度(px)
		height_rpx: 0, // page窗口高度(rpx)
		"screenWidth_px": 0, // 屏幕窗口宽度(px)
		"screenWidth_rpx": 0, // 屏幕窗口宽度(rpx)
		screenHeight_px: 0, // 屏幕窗口高度(px)
		screenHeight_rpx: 0, // 屏幕窗口高度(rpx)
	};
	
	// 是否全部信息获取完成
	var finish_system = false; // 系统信息获取完毕
	var finish_IP = isGetIp==true ? false : true; // IP地址获取完毕
	// 获取完毕后的回调方法
	var fun_back = () => {
		// 如果信息都获取完毕，执行回调
		if (finish_system==true && finish_IP==true)
		{
			// 执行回调
			if (callback) { callback(data_back); }
		}
	};
	
    // 获取当前运行环境
    var runType = runtimeType();
    // 如果是“非UNI”环境
    if (runType == 'nonUNI')
    {
        // 获取内核信息
        var ua = navigator.userAgent.toLowerCase();
        // 平台检测
        if (ua.indexOf('android') >= 0 || ua.indexOf('linux') >= 0) { data_back.platform = 'android'; }
        else if (ua.match(/\(i[^;]+;( u;)? cpu.+mac os x/)) { data_back.platform = 'ios'; }
        else { data_back.platform = 'pc' }
        // 平台版本
        try {
            if (data_back.platform == 'android') { data_back.system = ua.match(/android ([\d.]+)/)[1]; }
            else if (data_back.platform == 'ios') { data_back.system = ua.match(/version\/([\d.]+)/)[1]; }
            else if (data_back.platform == 'pc') { data_back.system = navigator.platform; }
        } catch (e) {}
        // 浏览器名称
        if (ua.indexOf("opr") >= 0 || ua.indexOf("opera") >= 0) { data_back.brand = 'Opera'; }
        else if (ua.indexOf("firefox") >= 0) { data_back.brand = 'FireFox'; }
        else if (ua.indexOf("chrome") >= 0) { data_back.brand = 'Chrome'; }
        else if (ua.indexOf("safari") >= 0) { data_back.brand = 'Safari'; }
        else if (ua.indexOf("msie") >= 0 || ua.indexOf("rv") >= 0) { data_back.brand = 'IE'; }
        // 浏览器版本号
        try{
            if (data_back.brand=='Opera') { data_back.model = ua.match(/opera.([\d.]+)/)[1]; }
            else if (data_back.brand=='FireFox') { data_back.model = ua.match(/firefox\/([\d.]+)/)[1]; }
            else if (data_back.brand=='Chrome') { data_back.model = ua.match(/chrome\/([\d.]+)/)[1]; }
            else if (data_back.brand=='Safari') { data_back.model = ua.match(/safari\/([\d.]+)/)[1]; }
            else if (data_back.brand=='IE') { data_back.model = ua.match(/msie ([\d.]+)/)[1]; }
        } catch (e) {}
        // 页面窗口大小 赋值
        data_back.screenWidth_px = window.innerWidth; // document.documentElement.clientWidth——不包括滚动条     window.innerWidth——包含滚动条
        data_back.screenHeight_px = window.innerHeight; // 或者window.innerHeight
        // 系统信息获取完毕标识
        finish_system = true;
        // 执行回调方法
        fun_back();
    }
    // 如果是UNI环境
    else {
        // 获取系统信息
        uni.getSystemInfo({
        	success: (sysInfo) => {
        		// 手机设备信息 赋值
        		data_back.platform = sysInfo.platform;
        		data_back.system = sysInfo.system;
        		data_back.brand = sysInfo.brand;
        		data_back.model = sysInfo.model;
        		// 状态栏信息 赋值
        		data_back.statusBar_px = sysInfo.statusBarHeight;
        		data_back.statusBar_rpx = Math.round(sysInfo.statusBarHeight * 750 / sysInfo.windowWidth);
        		// 原生导航栏信息 赋值
                data_back.navigationBar_px = 44;
        		data_back.navigationBar_rpx = Math.round(data_back.navigationBar_px * 750 / sysInfo.windowWidth);
        		// 页面窗口大小 赋值
        		data_back.width_px = Math.round(sysInfo.windowWidth);
        		data_back.width_rpx = 750;
        		data_back.height_px = sysInfo.windowHeight;
        		data_back.height_rpx = Math.round(sysInfo.windowHeight * 750 / sysInfo.windowWidth);
        		// 屏幕大小 赋值
        		data_back.screenWidth_px = Math.round(sysInfo.screenWidth);
        		data_back.screenWidth_rpx = 750;
        		data_back.screenHeight_px = sysInfo.screenHeight;
        		data_back.screenHeight_rpx = Math.round(sysInfo.screenHeight * 750 / sysInfo.screenWidth);
        		// 系统信息获取完毕标识
        		finish_system = true;
        		// 执行回调方法
        		fun_back();
        	}
        });
    }
    
	// 获取IP地址信息
	if (isGetIp == true)
	{
		// 发起请求
		uni.request({
			method: 'GET',
			url: 'http://app.bilibili.com/x/resource/ip',
            // withCredentials: true,
			// 请求失败
			fail: (res) => {
				// IP地址信息获取完毕标识
				finish_IP = true;
				// 执行回调方法
				fun_back();
			},
			// 请求成功
			success: (res) => {
				// 取出云端返回的数据
				var data_cloud = res.data;
				// 有效数据执行
				if (data_cloud.data && data_cloud.data.addr)
				{
					// IP地址信息 赋值
					data_back.IP = data_cloud.data.addr;
					data_back.country = data_cloud.data.country;
					data_back.province = data_cloud.data.province;
				}
				// IP地址信息获取完毕标识
				finish_IP = true;
				// 执行回调方法
				fun_back(); 
			}
		});
	}
	
}

export default systemInfo;